﻿/**
 *本日历选择控件由tiannet根据前人经验完善而得。部分代码来自meizz的日历控件。
 *tiannet添加了时间选择功能及还有其它小功能。
 *使用方法：
 *	(1)只选择日期				<input type="text" name="date"		readOnly onClick="setDay(this);">
 *	(2)选择日期和小时			<input type="text" name="dateh"		readOnly onClick="setDayH(this);">
 *	(3)选择日期和小时及分钟		<input type="text" name="datehm"	readOnly onClick="setDayHM(this);">
 *	(4)选择日期和小时及分钟和秒	<input type="text" name="datehms"	readOnly onClick="setDayHMS(this);">
 * 如果触发控件和接收值的控件不是同一个对象，那么可传递两个参数，第一个为触发控件对象，第二个为接收值的对象。
 *设置参数的方法
 *	(1)设置日期时间格式化				setTnDateTimeFormat(format);默认为yyyy-mm-dd hh:mm:ss
 *	(2)设置可选择的年份范围				setYearPeriod(min,max)
 *	(3)设置可选择的最小年份				setMinYear(min)
 *	(4)设置可选择的最大年份				setMaxYear(max) 
 *	(4)设置是否允许扩展可选择的年份范围	setAllowExpandYearPeriod(allowed) 当选择年份超过可选择范围时，该设置才有效。默认为允许
 *说明：
 *	默认返回的日期时间格式如同：2005-02-02 08:08:08
 *  20080201
 */
//----------------------------------  开始用户可调函数编写 -----------------------------------------//
/**
 * 只选择日期
 * @param objSrc 触发控件的元素，可为对象本身或ID值。
 * @param objDest 接收控件值的元素，可为对象本身或ID值。
 *  如果不传递参数，那么objSrc和objDest均为触发事件的元素，
 * 如果只传递一个参数，则objSrc和objDest均为该参数值。
 */
function setDay(objSrc, objDest) {
	if(arguments.length == 0) {
		objSrc = window.event.srcElement;objDest = objSrc;
	} else if(arguments.length == 1) {
		objSrc = objTnDateTime.$1(objSrc);
		objDest = objSrc;
	} else {
		objSrc = objTnDateTime.$1(objSrc);
		objDest = objTnDateTime.$1(objDest);
	}
	objTnDateTime.dttype = "ymd";//返回值的格式
	//时分秒都不显示
	objTnDateTime.isShowHour = false;objTnDateTime.isShowMinute = false;objTnDateTime.isShowSecond = false;
	objTnDateTime.showControl(objSrc,objDest);

}
/**
 * 只选择日期和小时
 * @param objSrc 触发控件的元素，可为对象本身或ID值。
 * @param objDest 接收控件值的元素，可为对象本身或ID值。
 *  如果不传递参数，那么objSrc和objDest均为触发事件的元素，
 * 如果只传递一个参数，则objSrc和objDest均为该参数值。
 */
function setDayH(objSrc, objDest) {
	if(arguments.length == 0) {
		objSrc = window.event.srcElement;objDest = objSrc;
	} else if(arguments.length == 1) {
		objSrc = objTnDateTime.$1(objSrc);
		objDest = objSrc;
	} else {
		objSrc = objTnDateTime.$1(objSrc);
		objDest = objTnDateTime.$1(objDest);
	}
	objTnDateTime.dttype = "ymdh";//返回值的格式
	//时显示，分秒都不显示
	objTnDateTime.isShowHour = true;objTnDateTime.isShowMinute = false;objTnDateTime.isShowSecond = false;
	objTnDateTime.showControl(objSrc,objDest);
}
/**
 * 只选择日期和小时分钟
 * @param objSrc 触发控件的元素，可为对象本身或ID值。
 * @param objDest 接收控件值的元素，可为对象本身或ID值。
 *  如果不传递参数，那么objSrc和objDest均为触发事件的元素，
 * 如果只传递一个参数，则objSrc和objDest均为该参数值。
 */
function setDayHM(objSrc, objDest) {
	if(arguments.length == 0) {
		objSrc = window.event.srcElement;objDest = objSrc;
	} else if(arguments.length == 1) {
		objSrc = objTnDateTime.$1(objSrc);
		objDest = objSrc;
	} else {
		objSrc = objTnDateTime.$1(objSrc);
		objDest = objTnDateTime.$1(objDest);
	}
	objTnDateTime.dttype = "ymdhm";//返回值的格式
	//时分显示，秒不显示
	objTnDateTime.isShowHour = true;objTnDateTime.isShowMinute = true;objTnDateTime.isShowSecond = false;
	objTnDateTime.showControl(objSrc,objDest);
}
/**
 * 只选择日期和小时分钟秒。
 * @param objSrc 触发控件的元素，可为对象本身或ID值。
 * @param objDest 接收控件值的元素，可为对象本身或ID值。
 *  如果不传递参数，那么objSrc和objDest均为触发事件的元素，
 * 如果只传递一个参数，则objSrc和objDest均为该参数值。
 */
function setDayHMS(objSrc, objDest) {
	if(arguments.length == 0) {
		objSrc = window.event.srcElement;objDest = objSrc;
	} else if(arguments.length == 1) {
		objSrc = objTnDateTime.$1(objSrc);
		objDest = objSrc;
	} else {
		objSrc = objTnDateTime.$1(objSrc);
		objDest = objTnDateTime.$1(objDest);
	}
	objTnDateTime.dttype = "ymdhms";//返回值的格式
	//时分显示，秒不显示
	objTnDateTime.isShowHour = true;objTnDateTime.isShowMinute = true;objTnDateTime.isShowSecond = true;
	objTnDateTime.showControl(objSrc,objDest);
}
/**
 * 设置是否允许扩展年份的可选范围，默认为允许。
 * @param allowed 是否允许。
 */
function setAllowExpandYearPeriod(allowed) {
	objTnDateTime.allowExpandYearPeriod = allowed;
}
/**
 * 设置可选择的年份范围
 * @param min 可选择的最小年份
 * @param max 可选择的最大年份
 */
function setYearPeriod(min,max) {
	objTnDateTime.yearStart = min;
	objTnDateTime.yearEnd = max;
	//考虑两个值大小颠倒
	if(min > max) {
		objTnDateTime.yearStart = max;
		objTnDateTime.yearEnd = min;
	}
}//end function setYearPeriod
/**
 * 设置可选择的最小年份
 * @param min 可选择的最小年份
 */
function setMinYear(min) {
	objTnDateTime.yearStart = min;
}//end function setMinYear
/**
 * 设置可选择的最大年份
 * @param min 可选择的最大年份
 */
function setMaxYear(max) {
	objTnDateTime.yearEnd = max;
}//end function setMaxYear
/**
 * 设置日期时间的格式化输出形式，默认为yyyy-mm-dd hh:mm:ss。
 * yyyy - 年份；mm - 月份；dd - 天；hh - 小时；mm - 分钟(总视为位于月份后 ) ss - 秒
 * @param format 日期时间的格式化输出形式。
 */
function setTnDateTimeFormat(format) {
	objTnDateTime.format = format;
}
//----------------------------------   结束用户可调函数编写 -----------------------------------------//

document.write("<div id='tnDateTimeLayer' style='position: absolute; z-index: 9999; width: 150; height: 191; display:none ;");
document.write("border-left:1 solid #CCCCCC;border-top:1 solid #CCCCCC;border-right:1 solid #999999;border-bottom:1 solid #999999;'");
document.write("</div>"); 
document.write("<iframe name='tnDateTimeIframe' scrolling=no frameborder=0 width=100% height=100%></iframe></div>");


//写入控件显示的html代码
function tnDateTimeWriteHtml() {
	var aHtml = new Array();
	aHtml.push("<html><head><meta http-equiv='Content-Type' content='text/html; charset=gb2312'>");
	//样式区域
	aHtml.push("<style>");
	aHtml.push("body{background-color:#2650A6;margin:0 0px;}");
	aHtml.push("select{font-size:9pt;font-family:Courier New,宋体;}");
	//年月时间选择等按钮样式
	aHtml.push(".btnBase{font-size:9pt;font-family:宋体;color:white;border:0;cursor:hand;background-color:#2650A6;}");
	//显示天的单元格样式
	aHtml.push("TD.day{width:21px;height:20px;background-color:#EFEFEF;font-size:9pt;color:black;font-family:Courier New,宋体;cursor:hand;}");
	//周末的样式
	aHtml.push("TD.weekend{width:21px;height:20px;background-color:#EFEFEF;font-size:9pt;color:#ff0000;font-family:Courier New,宋体;cursor:hand;}");
	//选中的天的单元格样式
	aHtml.push("TD.selectedday{width:21px;height:20px;background-color:#CCCCCC;font-size:9pt;color:black;font-family:Courier New,宋体;cursor:hand;}");
	//没有天的单元格样式
	aHtml.push("TD.noday{width:21px;height:20px;background-color:#FFFFFF;font-size:9pt;color:black;font-family:宋体;}");
	//分割线的样式
	aHtml.push(".line{border-bottom:1 solid #6699CC;}");//输出一条横线
	aHtml.push(".font{color:#FFCC00;font-size:9pt;cursor:hand;}");
	aHtml.push(".link{text-decoration:none;font-size:9pt;color:#2650A6;cursor:hand;height:18px;}");//清空、关闭、确定等链接样式
	aHtml.push(".week{background-color:#2650A6;font-size:9pt;color:white;height:20px;}");//显示周的行
	aHtml.push("</style>");
	aHtml.push("</head");
	aHtml.push("<body onselectstart='return false' oncontextmenu='return false'>");
	//开始年月时间选择区域
	aHtml.push("<table  align='center' cellpadding='2' cellspacing='0' onselectstart='return false;' width='100%'>");
	aHtml.push("<tr><td align='center'  height='22px;'>");
	aHtml.push('<span id="spanYearHead" class="font" '+
				'onclick="parent.objTnDateTime.spanYearCEvent();">&nbsp;年</span>');
	aHtml.push('<select id="selYear" style="display:none;width:62px;"  '+
					' onChange="parent.objTnDateTime.selYearChgEvent(this.value);">');
	for(var i = objTnDateTime.yearStart;i <= objTnDateTime.yearEnd;i ++){
		aHtml.push('<option value="' + i + '">' + i + '年</option>');
	}
	aHtml.push('</select>');
	aHtml.push('<span id="spanMonthHead"  class="font" '+
					'onclick="parent.objTnDateTime.spanMonthCEvent();">&nbsp;&nbsp;月</span>');
	aHtml.push('<select id="selMonth"  style="display:none;width:44px;" '+
					'onChange="parent.objTnDateTime.selMonthChgEvent(this.value);">');
	for(var i=1;i <= 12;i ++){
		aHtml.push('<option value="' + i + '">' + i + '月</option>');
	}
	aHtml.push('</select>');
	//----------------- 小时的选择 --------------------//
	aHtml.push('<span id="spanHourHead" class="font" style="display:none;" '+
					'onclick="parent.objTnDateTime.spanHourCEvent();">&nbsp;时</span>');
	aHtml.push('<select id="selHour" style="display:none;width:44px;display:none;"  '+
					' onChange="parent.objTnDateTime.selHourChgEvent(this.value);">');
	for(var i=0;i <= 23;i ++){
		aHtml.push('<option value="' + i + '">' + i + '时</option>');
	}
	aHtml.push('</select>');
	//----------------- 分的选择 --------------------//
	aHtml.push('<span id="spanMinuteHead" class="font" style="display:none;" '+
					'onclick="parent.objTnDateTime.spanMinuteCEvent();">&nbsp;&nbsp;分</span>');
	aHtml.push('<select id="selMinute" style="display:none;width:44px;display:none;" '+
					'  onChange="parent.objTnDateTime.selMinuteChgEvent(this.value);">');
	for(var i=0;i <= 59;i ++){
		aHtml.push('<option value="' + i + '">' + i + '分</option>');
	}

	aHtml.push('</select>');
	//----------------- 秒的选择 --------------------//
	aHtml.push('<span id="spanSecondHead" class="font" style="display:none;" '+
					'onclick="parent.objTnDateTime.spanSecondCEvent();">&nbsp;&nbsp;秒</span>');
	aHtml.push('<select id="selSecond"  style="display:none;width:44px;display:none;" '+
					'  onChange="parent.objTnDateTime.selSecondChgEvent(this.value);">');
	for(var i=0;i <= 59;i ++){
		aHtml.push('<option value="' + i + '">' + i + '秒</option>');
	}
	aHtml.push('</select>');

	aHtml.push("</td></tr>");
	//结束年月时间选择区域
	
	aHtml.push("<tr><td  height='1px;' bgcolor='#6699CC'></td</tr>");
	aHtml.push("<tr><td align='center'>");
	aHtml.push("<table border='0' cellspacing='0' cellpadding='0'><tr>");
	aHtml.push('<td class="btnBase" width="30px;" align="center"  title="上一年"  onClick="parent.objTnDateTime.doPrevYear();">年↑</td>');
	aHtml.push('<td class="btnBase" width="30px;" align="center"  title="下一年"  onClick="parent.objTnDateTime.doNextYear();">年↓</td>');
	aHtml.push('<td class="btnBase" width="30px;" align="center"  title="上一月"  onClick="parent.objTnDateTime.doPrevMonth();">月↑</td>');
	aHtml.push('<td class="btnBase" width="30px;" align="center"  title="下一月"  onClick="parent.objTnDateTime.doNextMonth();">月↓</td>');
	aHtml.push("</tr></table>");
	aHtml.push("</td></tr>");
	aHtml.push("<tr><td  height='1px;' bgcolor='#6699CC'></td</tr>");
	aHtml.push('</table>');
	
	//开始天的输出
	aHtml.push('<table border=0 cellspacing=0 cellpadding=0  bgcolor=white onselectstart="return false">');
	aHtml.push('	<tr class="week" >');
	var weekName = new Array("日","一","二","三","四","五","六");
	for(var i =0;i < weekName.length;i ++){
		//输出星期
		aHtml.push('<td width="21" align="center" >' + weekName[i] + '</td>');
	}
	aHtml.push('	</tr>');
	aHtml.push('</table>');

	//输出天的输出
	aHtml.push('<table border=0 cellspacing=1 cellpadding=0  bgcolor=white onselectstart="return false">');
	var n = 0;
	for (var i=0;i<5;i++) { 
		aHtml.push (' <tr align=center id="trDay' + i + '" >');
		for (var j=0;j<7;j++){
			aHtml.push('<td align="center" id="tdDay' + n + '" '
				+' onClick="parent.objTnDateTime.dayClickEvent(this.innerText);" class="day">&nbsp;</td>');
			n ++;
		}
		aHtml.push (' </tr>');
	}
	aHtml.push (' <tr align=center id="trDay5" >');
	aHtml.push('<td align="center" id="tdDay35" onClick="parent.objTnDateTime.dayClickEvent(this.innerText);" ' 
					+' class="day">&nbsp;</td>');
	aHtml.push('<td align="center" id="tdDay36" onClick="parent.objTnDateTime.dayClickEvent(this.innerText);" ' 
					+' class="day">&nbsp;</td>');
	aHtml.push('<td align="right" valign="middle" colspan="5"><span onclick="javascript:parent.objTnDateTime.clear();" class="link">清空</span>'+
					'&nbsp;<span onclick="javascript:parent.objTnDateTime.hideControl();" class="link">关闭</span>' +
					'&nbsp;<span onclick="javascript:parent.objTnDateTime.updateValueToDest();parent.objTnDateTime.hideControl();" class="link">'
					+'确定</span>&nbsp;' +
					'</td>');
	aHtml.push (' </tr>');
	aHtml.push('</table>');
	//结束天的输出

	aHtml.push("</body>");
	aHtml.push("</html>");

	
	//指定各天的事件
	with(objTnDateTime.iframe) {
		document.writeln(aHtml.join("")); 
		document.close();
		var len = objTnDateTime.objectDays.length;
        for(var i=0; i<len; i++)
        {
            objTnDateTime.objectDays[i] = document.getElementById("tdDay"+ i);
        }
    }
	

}//end function tnDateTimeWriteHtml

function TnDateTime(){
	this.date = new Date();
	this.year = this.date.getFullYear();//年
	this.yearStart = 1920;//可选择的开始年份
	this.yearEnd = this.year < 2008? 2020 : this.year;//可选择的结束年份
	this.month = this.date.getMonth()+1;//月
	this.day = this.date.getDate();//日
	this.hour = this.date.getHours();//时
	this.minute = this.date.getMinutes();//分
	this.second = this.date.getSeconds();//秒
	this.daysMonth  = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);//各个月份的天数
	this.objectDays = new Array(37);//37个用于存放天的对象


	this.isShowHour = false;//是否显示小时
	this.isShowMinute = false;//是否显示分钟
	this.isShowSecond = false;//是否显示妙

	this.allowExpandYearPeriod = true;//是否允许扩展年份选择范围
	this.format = "yyyy-mm-dd hh:mm:ss";//日期时间格式化
	this.defaultFormat = "yyyy-mm-dd hh:mm:ss";// 默认的格式化，请慎重改变该值
	this.dttype = "ymd";//返回的日期时间类型，共四种：ymd(只包括年月日),ymdh(包括年月日时),ymdhm(包括年月日时分),ymdhms(包括年月日时秒)

	this.objectSrc = null;//触发事件的对象
	this.objectDest = null;//接收日期时间值的对象

	this.iframe = window.frames("tnDateTimeIframe");//加载控件的iframe
	this.layer = document.getElementById("tnDateTimeLayer");//显示控件的层


}//end function TnDateTime

//由ID或对象本身得到iframe中的元素对象
TnDateTime.prototype.$ = function(element) {
	if(typeof(element) == "object") return element;
    return this.iframe.document.getElementById(element);
}
//由ID或对象本身得到当前文档中的元素对象
TnDateTime.prototype.$1 = function(element) {
	if(typeof(element) == "object") return element;
    return document.getElementById(element);
}
//隐藏一个或一组元素
TnDateTime.prototype.hideElement = function(elements) {
	if(typeof(elements) == "string" || elements.constructor != Array) {
		elements = new Array(elements);
	}
	for(var i = 0;i < elements.length;i ++) {
		this.$(elements[i]).style.display = "none";
	}
}
//显示一个或一一组元素
TnDateTime.prototype.showElement = function(elements) {
	if(typeof(elements) == "string" || elements.constructor != Array) {
		elements = new Array(elements);
	}
	for(var i = 0;i < elements.length;i ++) {
		this.$(elements[i]).style.display = "";
	}
}
//------------------ 显示年月时间的span标签响应事件 ---------------------------//
//单击年份span标签响应
TnDateTime.prototype.spanYearCEvent = function(){
	this.showElement(new Array("selYear","spanMonthHead"));
	if(this.isShowHour) this.showElement("spanHourHead");
	if(this.isShowMinute) this.showElement("spanMinuteHead");
	if(this.isShowSecond) this.showElement("spanSecondHead");
	this.hideElement(new Array("spanYearHead","selMonth","selHour","selMinute","selSecond"));
}
//单击月份span标签响应
TnDateTime.prototype.spanMonthCEvent = function(){
	this.showElement(new Array("selMonth","spanYearHead"));
	if(this.isShowHour) this.showElement("spanHourHead");
	if(this.isShowMinute) this.showElement("spanMinuteHead");
	if(this.isShowSecond) this.showElement("spanSecondHead");
	this.hideElement(new Array("spanMonthHead","selYear","selHour","selMinute","selSecond"));
}
//单击小时span标签响应
TnDateTime.prototype.spanHourCEvent = function(){
	this.showElement(new Array("selHour","spanYearHead","spanMonthHead"));
	if(this.isShowMinute) this.showElement("spanMinuteHead");
	if(this.isShowSecond) this.showElement("spanSecondHead");
	this.hideElement(new Array("spanHourHead","selYear","selMonth","selMinute","selSecond"));
}
//单击分钟span标签响应
TnDateTime.prototype.spanMinuteCEvent = function(){
	this.showElement(new Array("selMinute","spanYearHead","spanMonthHead","spanHourHead"));
	if(this.isShowSecond) this.showElement("spanSecondHead");
	this.hideElement(new Array("spanMinuteHead","selYear","selMonth","selHour","selSecond"));
}
//单击秒span标签响应
TnDateTime.prototype.spanSecondCEvent = function(){
	this.showElement(new Array("selSecond","spanYearHead","spanMonthHead","spanHourHead","spanMinuteHead"));
	this.hideElement(new Array("spanSecondHead","selYear","selMonth","selHour","selMinute"));
}
//------------------ end 显示年月时间的span标签响应事件 ---------------------------//

//------------------ 开始显示年月时间的select标签响应事件 ---------------------------//
//年份下拉框的change事件
TnDateTime.prototype.selYearChgEvent = function(value) {
	this.year = parseInt(value,10);this.updateHead();this.updateDay();//更新日
	this.showElement("spanYearHead");this.hideElement("selYear");
	this.updateValueToDest();//更新目标对象的值
}

//月份下拉框的change事件
TnDateTime.prototype.selMonthChgEvent = function (value) {
	this.month = parseInt(value,10);this.updateHead();this.updateDay();
	this.showElement("spanMonthHead");this.hideElement("selMonth");
	this.updateValueToDest();//更新目标对象的值
}

//小时下拉框的change事件
TnDateTime.prototype.selHourChgEvent = function (value) {
	this.hour = parseInt(value,10);this.updateHead();//更新头部
	this.showElement("spanHourHead");this.hideElement("selHour");
	this.updateValueToDest();//更新目标对象的值
}

//分钟下拉框的change事件
TnDateTime.prototype.selMinuteChgEvent = function(value) {
	this.minute = parseInt(value,10);this.updateHead();
	this.showElement("spanMinuteHead");this.hideElement("selMinute");
	this.updateValueToDest();//更新目标对象的值
}
//秒下拉框的change事件
TnDateTime.prototype.selSecondChgEvent = function (value) {
	this.second = parseInt(value,10);this.updateHead();
	this.showElement("spanSecondHead");this.hideElement("selSecond");
	this.updateValueToDest();//更新目标对象的值
}
//------------------ 结束显示年月时间的select标签响应事件 ---------------------------//

//------------------ 开始向上向下翻年和翻月及单击日的处理 ---------------------------//
//向上翻年
TnDateTime.prototype.doPrevYear = function() {
	if( !this.allowExpandYearPeriod && this.year <= this.yearStart ) {
		alert("您要选择的年份" + (this.year - 1) + "已经小于最小允许的年份" + this.yearStart + "！");
		return;
	}
	if(this.year > 1000 && this.year <10000){this.year--;}
	else{alert("年份超出范围（1000-9999）！");}
	this.updateDay();
	//如果年份小于允许的最小年份，则创建对应的option
	if( this.year < this.yearStart ) {
		this.yearStart = this.year;
		var o = document.createElement("OPTION");
		o.value = this.year;o.text = this.year + "年";
		this.$("selYear").add(o,0);//加入到第一个位置

	}
	this.checkSelect("selYear",this.year);
	this.updateHead();this.updateValueToDest();//更新目标对象的值
}//end doPrevYear

//向下翻年
TnDateTime.prototype.doNextYear = function() {
	if( !this.allowExpandYearPeriod && this.year >= this.yearEnd ) {
		alert("您要选择的年份" + (this.year + 1) + "已经大于最大允许的年份" + this.yearEnd + "！");
		return;
	}
	if(this.year > 999 && this.year <9999){this.year++;}
	else{alert("年份超出范围（1000-9999）！");}
	this.updateDay();
	//如果年份大于允许的最小年份，则创建对应的option
	if( this.year > this.yearEnd ) {
		this.yearEnd = this.year;
		var o = document.createElement("OPTION");
		o.value = this.year;o.text = this.year + "年";
		this.$("selYear").add(o);//加入到最后一个位置

	}
	this.checkSelect("selYear",this.year);
	this.updateHead();this.updateValueToDest();//更新目标对象的值
}//end doNextYear

//向上翻月
TnDateTime.prototype.doPrevMonth = function() {
	if(this.month == 1) this.month = 12;
	else this.month --;
	this.updateDay();this.checkSelect("selMonth",this.month);
	this.updateHead();this.updateValueToDest();//更新目标对象的值

}
//向下翻月
TnDateTime.prototype.doNextMonth = function() {
	if(this.month == 12) this.month = 1;
	else this.month ++;
	this.updateDay();this.checkSelect("selMonth",this.month);
	this.updateHead();this.updateValueToDest();//更新目标对象的值

}
//单击日得事件处理
TnDateTime.prototype.dayClickEvent = function(day) {
	this.day = day;
	this.updateValueToDest();this.hideControl();
}
//------------------ 结束向上向下翻年和翻月单击日的处理 ---------------------------//

//更新头部
TnDateTime.prototype.updateHead = function() {
	this.$("spanYearHead").innerText = this.year + "年";
	this.$("spanMonthHead").innerText = this.month + "月";
	if(this.isShowHour) this.$("spanHourHead").innerText = this.hour + "时";
	if(this.isShowMinute) this.$("spanMinuteHead").innerText = this.minute + "分";
	if(this.isShowSecond) this.$("spanSecondHead").innerText = this.second + "秒";
}

//更新日的数据
TnDateTime.prototype.updateDay = function() {
	this.daysMonth[1] = 28;
	// 判断是否为闰年
	if (0==this.year%4&&((this.year%100!=0)||(this.year%400==0))) {
		this.daysMonth[1] = 29;//闰年的2月为29天
	}
	//如果当前日大于月的最大日，则将日重新赋值为当前月的最大日
	if( this.day > this.daysMonth[this.month - 1] ) {
		this.day = this.daysMonth[this.month - 1];
	}
	var aDayText = new Array(this.objectDays.length);//各日对应单元格的文本内容
	//将所有日的文本清空
	for(var i = 0;i < aDayText.length;i ++) {
		aDayText[i] = "";
	}
	var day1 = 1;
	var firstday = new Date(this.year,this.month-1,1).getDay();  //某月第一天的星期几
	var monthDayCount = this.daysMonth[this.month - 1];//月份的天数
	for (var i = firstday; day1 <= monthDayCount; i++){
		aDayText[i]=day1;day1++;
	}
	//向单元格种写入天
	for(var i = 0;i < aDayText.length;i ++) {
		this.objectDays[i].className = "day";
		this.objectDays[i].innerText = aDayText[i];
		if( aDayText[i] != "" ) {
			//周末的样式
			if(i % 7 == 0 || (i+1) % 7 == 0){
				this.objectDays[i].className = "weekend";
			}
			//当前天的样式
			if(parseInt(aDayText[i],10) == this.day) {
				this.objectDays[i].className = "selectedday";
			}
			this.objectDays[i].title = this.year + "-" + this.addZero(this.month) + "-" + this.addZero(aDayText[i]);
		} else {
			this.objectDays[i].className = "noday";
		}
		
	}//end for
}//end updateDay

//更新目标对象的值
TnDateTime.prototype.updateValueToDest = function() {
	this.objectDest.value = this.getFormatValue();
}

//选中所有下拉框。
TnDateTime.prototype.checkAllSelect = function(){
	this.checkSelect("selYear",this.year);this.checkSelect("selMonth",this.month);
	this.checkSelect("selHour",this.hour);this.checkSelect("selMinute",this.minute);
	this.checkSelect("selSecond",this.second);
}

//选中下拉框
TnDateTime.prototype.checkSelect = function(sel,value) {
	var obj = this.$(sel);
	var count = parseInt(obj.length,10);
	for(var i = 0;i < count;i ++){
		if(obj.options[i].value == value){
			obj.selectedIndex = i;
			break;
		}
	}//for
}

//在数字前加0
TnDateTime.prototype.addZero = function(value) {
	value = parseInt(value,10);
	if(value < 10) return "0" + value;
	return value;
}
TnDateTime.prototype.trim = function(value) {
	return value.replace(/(^\s*)|(\s*$)/g,"");
}
//得到格式化后的值
TnDateTime.prototype.getFormatValue = function() {
	var f = this.format;
	if(this.dttype == "ymd") {
		if(this.format == this.defaultFormat) f = this.format.substr(0,10);
		return f.replace("yyyy",this.year).replace("mm",this.addZero(this.month))
			.replace("dd",this.addZero(this.day));
	}
	if(this.dttype == "ymdh") {
		if(this.format == this.defaultFormat) f = this.format.substr(0,13);
		return f.replace("yyyy",this.year).replace("mm",this.addZero(this.month))
			.replace("dd",this.addZero(this.day)).replace("hh",this.addZero(this.hour));
	}
	if(this.dttype == "ymdhm") {
		if(this.format == this.defaultFormat) f = this.format.substr(0,16);
		return f.replace("yyyy",this.year).replace("mm",this.addZero(this.month))
			.replace("dd",this.addZero(this.day)).replace("hh",this.addZero(this.hour))
			.replace("mm",this.addZero(this.minute));
	}
	if(this.dttype == "ymdhms") {
		return f.replace("yyyy",this.year).replace("mm",this.addZero(this.month))
			.replace("dd",this.addZero(this.day)).replace("hh",this.addZero(this.hour))
			.replace("mm",this.addZero(this.minute)).replace("ss",this.addZero(this.second));
	}
	
}//end getFormatValue
//获取目标对象的值，根据格式，赋给相应的year,month等变量。
TnDateTime.prototype.fetchDestValue = function() {
	var value = this.objectDest.value;
	if(!value || this.trim(value) == "" ) return;
	value = this.trim(value);
	var f = this.format;
	var pos
	var temp;
	pos = f.indexOf("yyyy");
	if(pos >= 0 ) {
		temp = parseInt(value.substr(pos,4),10);
		if( temp != NaN && temp >= 1000 && temp <= 9999 ) this.year = temp;
	}
	pos = f.indexOf("mm");
	if(pos >= 0) {
		temp = parseInt(value.substr(pos,2),10);
		if( temp != NaN && temp >= 1 && temp <= 12 ) this.month = temp;
	}
	pos = f.indexOf("dd");
	if(pos >= 0) {
		temp = parseInt(value.substr(pos,2),10);
		if( temp != NaN && temp >= 1 && temp <= 31 ) this.day = temp;
	}
	if(this.dttype.length >= 4)  {
		pos = f.indexOf("hh");
		if(pos >= 0) {
			temp = parseInt(value.substr(pos,2),10);
			if( temp != NaN && temp >= 0 && temp <= 23 ) this.hour = temp;
		}
	}
	if(this.dttype.length >= 5)  {
		pos = f.lastIndexOf("mm");
		if(pos >= 0) {
			temp = parseInt(value.substr(pos,2),10);
			if( temp != NaN && temp >= 0 && temp <= 59 ) this.minute = temp;
		}
	}
	if(this.dttype >=6 )  {
		pos = f.indexOf("ss");
		if(pos >= 0) {
			temp = parseInt(value.substr(pos,2),10);
			if( temp != NaN && temp >= 0 && temp <= 59 ) this.second = temp;
		}
	}
	
}//end fetchDestValue

//显示控件，同时获取目标对象的值，并将控件的所有值初始化
//@param objSrc 触发控件显示的元素
//@param objDest 显示值的元素
TnDateTime.prototype.showControl = function(objSrc,objDest) {
	if(typeof(objDest) == "undefined") objDest = objSrc;
	this.objectSrc = objSrc;this.objectDest = objDest;
	
	//获取目标对象的值
	this.fetchDestValue();
	//alert(this.year);
	//判断年份是否在最小最大年份之内
	if( this.year < this.yearStart) this.yearStart = this.year;
	if( this.year > this.yearEnd) this.yearEnd = this.year;

	tnDateTimeWriteHtml();//写入html代码至iframe种
	this.showElement(["spanYearHead","spanMonthHead"]);
	//默认隐藏所有下拉框
	this.hideElement(["selYear","selMonth","selHour","selMinute","selSecond"]);
	if(this.isShowHour) this.showElement("spanHourHead");
	if(this.isShowMinute) this.showElement("spanMinuteHead");
	if(this.isShowSecond) this.showElement("spanSecondHead");

	this.updateHead();
	this.updateDay();
	this.checkAllSelect();

	//得到控件显示的位置
	var e = this.objectSrc;
	var o = this.layer.style;
	var t = e.offsetTop,  h = e.clientHeight, l = e.offsetLeft, p = e.type;
	while (e = e.offsetParent){t += e.offsetTop; l += e.offsetLeft;}
    o.display = ""; this.iframe.document.body.focus();
    var cw = this.layer.clientWidth, ch = this.layer.clientHeight;
    var dw = document.body.clientWidth, dl = document.body.scrollLeft, dt = document.body.scrollTop;
    
    if (document.body.clientHeight + dt - t - h >= ch) o.top = (p=="image")? t + h : t + h + 6;
    else o.top  = (t - dt < ch) ? ((p=="image")? t + h : t + h + 6) : t - ch;
    if (dw + dl - l >= cw) o.left = l; else o.left = (dw >= cw) ? dw - cw + dl : dl;


}//end showControl
//隐藏控件
TnDateTime.prototype.hideControl = function() {
	this.layer.style.display = "none";
}
//清空控件的值
TnDateTime.prototype.clear = function() {
	this.objectDest.value = "";
}
//单击非控件区域隐藏控件
document.onclick = function() {
	if(objTnDateTime.objectSrc != window.event.srcElement) objTnDateTime.hideControl();
}

var objTnDateTime = new TnDateTime();